<template>
  <div>
    <div class="n-layout-page-header">
      <a-card :bordered="false" title="基础表单">
        基础表单，用于向用户收集表单信息，并展示 Password 组件使用示例</a-card
      >
    </div>
    <a-card :bordered="false" class="mt-3 proCard">
      <div class="BasicForm">
        <BasicForm
          ref="basicFormRef"
          submitButtonText="提交预约"
          :labelCol="{ span: 5 }"
          :rowProps="{ gutter: [16, 0] }"
          :colProps="{ span: 24 }"
          :schemas="schemas"
          actInheritLabelCol
          @submit="handleSubmit"
          @reset="handleReset"
        >
          <template #statusSlot="{ model, field }">
            <a-input v-model:value="model[field]" placeholder="请输入状态" />
          </template>

          <template #passwordSlot="{ model, field }">
            <Password
              ref="passwordRef"
              v-model:value="model[field]"
              @change="changePassword"
              block
              repeat
            />
          </template>
        </BasicForm>
      </div>
    </a-card>
  </div>
</template>

<script lang="ts" setup>
  import { ref } from 'vue';
  import { BasicForm, FormSchema } from '@/components/Form/index';
  import { Message } from '@arco-design/web-vue';
  import { Password } from '@/components/Password';

  const schemas: FormSchema[] = [
    {
      field: 'name',
      component: 'Input',
      label: '姓名',
      labelMessage: '这是一个提示',
      componentProps: {
        placeholder: '请输入姓名',
        onInput: (e: any) => {
          console.log(e);
        },
      },
      rules: [{ required: true, message: '请输入姓名', trigger: ['blur'] }],
    },
    {
      field: 'user.basic.age',
      component: 'InputNumber',
      label: '年龄',
      labelMessage: '这是一个field对象演示',
      componentProps: {
        placeholder: '请输入年龄',
      },
      rules: [{ required: true, type: 'number', message: '请输入年龄', trigger: ['blur'] }],
    },
    {
      field: 'mobile',
      component: 'InputNumber',
      label: '手机',
      componentProps: {
        placeholder: '请输入手机号码',
        hideButton: false,
        onInput: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'type',
      component: 'Select',
      label: '类型',
      componentProps: {
        placeholder: '请选择类型',
        options: [
          {
            label: '舒适性',
            value: 1,
          },
          {
            label: '经济性',
            value: 2,
          },
        ],
        onChange: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'makeDate',
      component: 'DatePicker',
      label: '预约时间',
      defaultValue: '',
      componentProps: {
        onChange: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'makeTime',
      component: 'TimePicker',
      label: '停留时间',
      componentProps: {
        onChange: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'makeProject',
      component: 'Checkbox',
      label: '预约项目',
      componentProps: {
        placeholder: '请选择预约项目',
        options: [
          {
            label: '种牙',
            value: 1,
          },
          {
            label: '补牙',
            value: 2,
          },
          {
            label: '根管',
            value: 3,
          },
        ],
        onChange: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'makeSource',
      component: 'RadioGroup',
      label: '来源',
      componentProps: {
        options: [
          {
            label: '网上',
            value: 1,
          },
          {
            label: '门店',
            value: 2,
          },
        ],
        onChange: (e: any) => {
          console.log(e);
        },
      },
    },
    {
      field: 'status',
      label: '状态',
      //插槽
      slot: 'statusSlot',
    },
    {
      field: 'password',
      label: '密码',
      slot: 'passwordSlot',
    },
  ];

  const passwordRef = ref();
  const basicFormRef = ref();

  function handleSubmit(values: Recordable) {
    // const isVal = passwordRef.value.isValidator();
    // if (!isVal) {
    //   return passwordRef.value.showValidator();
    // }
    console.log(basicFormRef.value);
    Message.success(JSON.stringify(values));
  }

  function handleReset(values: Recordable) {
    console.log(values);
  }

  function changePassword(value) {
    console.log(value);
  }
</script>

<style lang="less" scoped>
  .BasicForm {
    width: 550px;
    margin: 0 auto;
    overflow: hidden;
    padding-top: 20px;
  }
</style>
